home *** CD-ROM | disk | FTP | other *** search
- {$I SRCOMOPT.INC}
- unit Srmain;
-
- interface
-
- uses Windows, Classes, Graphics, Forms, Controls, WMacro,
- StdCtrls, SysUtils, Messages, Dialogs, ComCtrls, Grids;
-
- type
- TSuperRecorder = class(TForm)
- MacroSet1: TMacroSet;
- Label2: TLabel;
- gbGlobalSettings: TGroupBox;
- SaveBtn: TButton;
- LoadBtn: TButton;
- Merge: TCheckBox;
- RecordKeyMsg: TLabel;
- ScrapMacroKeyMsg: TLabel;
- CancelKeyMsg: TLabel;
- Memo1: TMemo;
- PauseKeyMsg: TLabel;
- DeleteBtn: TButton;
- gbMouseRelevant: TGroupBox;
- MousePointer: TRadioButton;
- MouseWindow: TRadioButton;
- MouseScreen: TRadioButton;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- btSendKeys: TButton;
- edSendKeys: TEdit;
- btAppActivate: TButton;
- gbToggles: TGroupBox;
- CapsLockButton: TButton;
- NumlockButton: TButton;
- ScrollLockButton: TButton;
- edAppActivate: TEdit;
- StringGrid1: TStringGrid;
- CancelCheck: TCheckBox;
- FastPlay: TCheckBox;
- SysWide: TCheckBox;
- gbMouseMessages: TGroupBox;
- MouseNone: TRadioButton;
- MouseClicks: TRadioButton;
- MouseEverything: TRadioButton;
- btApply: TButton;
- gbNewMacro: TGroupBox;
- MacroKeyComboBox1: TMacroKeyComboBox;
- edMacroName: TEdit;
- btCreateKeyMacro: TButton;
- btCreateCodeMacro: TButton;
- Label7: TLabel;
- Label8: TLabel;
- StatusBar1: TStatusBar;
- procedure FastPlayClick(Sender: TObject);
- procedure SysWideClick(Sender: TObject);
- procedure MouseNoneClick(Sender: TObject);
- procedure MouseClicksClick(Sender: TObject);
- procedure MouseEverythingClick(Sender: TObject);
- procedure btCreateKeyMacroClick(Sender: TObject);
- procedure btApplyClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
- procedure SaveBtnClick(Sender: TObject);
- procedure LoadBtnClick(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure btCreateCodeMacroClick(Sender: TObject);
- procedure CancelCheckClick(Sender: TObject);
- procedure DeleteBtnClick(Sender: TObject);
- procedure MousePointerClick(Sender: TObject);
- procedure MouseWindowClick(Sender: TObject);
- procedure MouseScreenClick(Sender: TObject);
- procedure btSendKeysClick(Sender: TObject);
- procedure MacroSet1Assigned(Sender: TObject; Macro: Pointer);
- procedure btAppActivateClick(Sender: TObject);
- procedure CapsLockButtonClick(Sender: TObject);
- procedure ScrollLockButtonClick(Sender: TObject);
- procedure NumlockButtonClick(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- SuperRecorder: TSuperRecorder;
- OurWindow : HWND;
- OldCursor,BIGPOINT : HCursor;
-
- implementation
- const
- OffOn : array[boolean] of string = ('OFF','ON ');
- SlowMouseVDelta = 5;
- SlowMouseHDelta = 5;
- FastMouseVDelta = 30;
- FastMouseHDelta = 30;
-
- {$R *.DFM}
- {$R BIGPOINT.RES}
-
- procedure TSuperRecorder.FastPlayClick(Sender: TObject);
- begin
- MacroSet1.FastPlayback:=FastPlay.Checked;
- end;
-
- procedure TSuperRecorder.SysWideClick(Sender: TObject);
- begin
- MacroSet1.SystemWide:=SysWide.Checked;
- end;
-
- procedure TSuperRecorder.MouseNoneClick(Sender: TObject);
- begin
- If MouseNone.Checked then MacroSet1.RecordMouse:=RMIgnore;
- end;
-
- procedure TSuperRecorder.MouseClicksClick(Sender: TObject);
- begin
- If MouseClicks.Checked then MacroSet1.RecordMouse:=RMClicksAndDrags;
- end;
-
- procedure TSuperRecorder.MouseEverythingClick(Sender: TObject);
- begin
- If MouseEverything.Checked then MacroSet1.RecordMouse:=RMAll;
- end;
-
- procedure TSuperRecorder.btCreateKeyMacroClick(Sender: TObject);
- begin
- try
- With MacroSet1, MacroKeyComboBox1 do
- If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,nil);
- except
- on Exception Do MessageBox(0,'An error occurred while adding the key macro','',MB_APPLMODAL);
- end;
- end;
-
- procedure TSuperRecorder.btApplyClick(Sender: TObject);
- begin
- With MacroSet1 do begin
- If MacrosOn then MacrosOff;
- MacrosOn;
- end;
-
- MacroSet1Assigned(Sender,nil);
- end;
-
- function GetTopLevelWindow(Handle : HWND) : HWND;
- begin
- while (GetParent(Handle)<>0) do Handle:=GetParent(Handle);
- result:=Handle;
- end;
-
- procedure ExampleCodeMacroProcedure; export;
- begin
- MessageBox(0,'Example Code Macro Procedure','',MB_APPLMODAL);
- end;
-
- Procedure RunProg(const Prog : Pchar);
- begin
- WinExec(Prog,SW_SHOWNORMAL);
- end;
-
- procedure RunCalc; export;
- begin
- RunProg('CALC.EXE');
- end;
-
- procedure RunNotePad; export;
- begin
- RunProg('NOTEPAD.EXE');
- end;
-
- procedure RunCalendar; export;
- begin
- RunProg('CALENDAR.EXE');
- end;
-
- procedure RunClock; export;
- begin
- RunProg('CLOCK.EXE');
- end;
-
- procedure MoveMouseUp; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.y:=MousePos.y-SlowMouseVDelta;
- If (MousePos.y<0) then MousePos.y:=0;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseLeft; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.x:=MousePos.x-SlowMouseHDelta;
- If (MousePos.x<0) then MousePos.x:=0;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseRight; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.x:=MousePos.x+SlowMouseHDelta;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseDown; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.y:=MousePos.y+SlowMouseVDelta;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseUpFast; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.y:=MousePos.y-FastMouseVDelta;
- If (MousePos.y<0) then MousePos.y:=0;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseLeftFast; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.x:=MousePos.x-FastMouseHDelta;
- If (MousePos.x<0) then MousePos.x:=0;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseRightFast; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.x:=MousePos.x+FastMouseHDelta;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseDownFast; export;
- var
- MousePos : TPoint;
- begin
- GetCursorPos(MousePos);
- MousePos.y:=MousePos.y+FastMouseVDelta;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseUpperLeft; export;
- var
- MousePos : TPoint;
- begin
- With MousePos do begin
- x:=0;
- y:=0;
- end;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseUpperRight; export;
- var
- MousePos : TPoint;
- begin
- With MousePos do begin
- x:=2048;
- y:=0;
- end;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseLowerLeft; export;
- var
- MousePos : TPoint;
- ScreenHeight : Integer;
- begin
- ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
- With MousePos do begin
- x:=0;
- y:=ScreenHeight;
- end;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseLowerRight; export;
- var
- MousePos : TPoint;
- ScreenWidth, ScreenHeight : Integer;
- begin
- ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
- ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
- With MousePos do begin
- x:=ScreenWidth;
- y:=ScreenHeight;
- end;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MoveMouseCenter; export;
- var
- MousePos : TPoint;
- ScreenWidth, ScreenHeight : Integer;
- begin
- ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
- ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
- With MousePos do begin
- x:=ScreenWidth div 2;
- y:=ScreenHeight div 2;
- end;
- SetCursorPos(MousePos.x,MousePos.y);
- end;
-
- procedure MagnifyPointer; export;
- var
- CurCursor : HCursor;
- begin
- CurCursor:=GetCursor;
- If (CurCursor<>BIGPOINT) then begin
- OldCursor:=CurCursor;
- SetCursor(BIGPOINT);
- end;
- end;
-
- procedure ShrinkPointer; export;
- var
- CurCursor : HCursor;
- begin
- CurCursor:=GetCursor;
- If (CurCursor=BIGPOINT) then
- SetCursor(OldCursor);
- end;
-
- procedure TypeA; far; export;
- begin
- SuperRecorder.MacroSet1.SendText('a');
- end;
-
- procedure SendKeysProc; export;
- const
- temp : pchar = '{ESC}4{+}5~'#0;
- begin
- SuperRecorder.MacroSet1.SendKeys(temp, False);
- while (SuperRecorder.MacroSet1.MacroState=msPlayback) do Application.ProcessMessages;
- end;
-
- procedure ClickLeftButton; export;
- var
- MousePos : TPoint;
- Lparam : Longint;
- CurWin : HWND;
- CurRect : TRect;
- begin
- GetCursorPos(MousePos);
- CurWin := WindowFromPoint(MousePos);
- GetWindowRect(CurWin, CurRect);
- Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
- SendMessage(CurWin,WM_LBUTTONDOWN,0,Lparam);
- SendMessage(CurWin,WM_LBUTTONUP,0,Lparam);
- end;
-
- procedure DoubleClickLeftButton; export;
- var
- MousePos : TPoint;
- Lparam : Longint;
- CurWin : HWND;
- CurRect : TRect;
- begin
- ClickLeftButton;
- GetCursorPos(MousePos);
- CurWin := WindowFromPoint(MousePos);
- GetWindowRect(CurWin, CurRect);
- Lparam:=MakeLong(MousePos.X-CurRect.Left, MousePos.Y-CurRect.Top);
- SendMessage(CurWin,WM_LBUTTONDBLCLK,0,Lparam);
- end;
-
- procedure TSuperRecorder.FormCreate(Sender: TObject);
- begin
- BIGPOINT:=LoadCursor(hInstance,pchar(255));
- With MacroSet1 do begin
- FastPlay.Checked:=FastPlayback;
- SysWide.Checked:=SystemWide;
- MouseNone.Checked:=(RecordMouse=RMIgnore);
- MouseClicks.Checked:=(RecordMouse=RMClicksAndDrags);
- MouseEverything.Checked:=(RecordMouse=RMAll);
- MousePointer.Checked:=(MouseBase=MBPointer);
- MouseWindow.Checked:=(MouseBase=MBWindow);
- MouseScreen.Checked:=(MouseBase=MBScreen);
- CancelCheck.Checked:=CancelChecking;
- CancelKey:=VK_CANCEL;
- MacrosOn;
- RecordKeyMsg.Caption:=RecordKeyMsg.Caption+KeyNames[ToggleRecordKey];
- ScrapMacroKeyMsg.Caption:=ScrapMacroKeyMsg.Caption+KeyNames[Keys[-1]];
- CancelKeyMsg.Caption:=CancelKeyMsg.Caption+KeyNames[CancelKey];
- PauseKeyMsg.Caption:=PauseKeyMsg.Caption+KeyNames[PauseKey];
- StatusBar1.Panels[0].Text:='DLL Version: '+Version;
- If (ParamCount=0) then begin
- {Install some demo code macros}
- Add(MK_CTRLALTC,ScrapMacro,'Run CALC.EXE',RunCalc);
- Add(MK_CTRLSHIFTRBTN,ScrapMacro,'Run NOTEPAD.EXE',RunNotePad);
- Add(MK_CTRLNUMSLASH,ScrapMacro,'Run CLOCK.EXE',RunClock);
- Add(MK_BACKQUOTE,ScrapMacro,'Send keys "{ESC}4{+}5~"',SendKeysProc);
- Add(MK_MBTN,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
- {$IFDEF BLINDGUY}
- Add(MK_SHIFTUP,ScrapMacro,'Move mouse up',MoveMouseUp);
- Add(MK_SHIFTDOWN,ScrapMacro,'Move mouse down',MoveMouseDown);
- Add(MK_SHIFTLEFT,ScrapMacro,'Move mouse left',MoveMouseLeft);
- Add(MK_SHIFTRIGHT,ScrapMacro,'Move mouse right',MoveMouseRight);
- Add(MK_SHIFTNUM8,ScrapMacro,'Move mouse up',MoveMouseUp);
- Add(MK_SHIFTNUM2,ScrapMacro,'Move mouse down',MoveMouseDown);
- Add(MK_SHIFTNUM4,ScrapMacro,'Move mouse left',MoveMouseLeft);
- Add(MK_SHIFTNUM6,ScrapMacro,'Move mouse right',MoveMouseRight);
- Add(MK_SHIFTHOME,ScrapMacro,'Move mouse to upper left',MoveMouseUpperLeft);
- Add(MK_SHIFTPGUP,ScrapMacro,'Move mouse to upper right',MoveMouseUpperRight);
- Add(MK_SHIFTEND,ScrapMacro,'Move mouse to lower left',MoveMouseLowerLeft);
- Add(MK_SHIFTPGDN,ScrapMacro,'Move mouse to lower right',MoveMouseLowerRight);
- Add(MK_CTRLSHIFTCENTER,ScrapMacro,'Move mouse to screen center',MoveMouseCenter);
- Add(MK_ALTSHIFTENTER,ScrapMacro,'Left mouse click',ClickLeftButton);
- Add(MK_CTRLALTENTER,ScrapMacro,'Left mouse double click', DoubleClickLeftButton);
- Add(MK_CTRLSHIFTM,ScrapMacro,'Magnify pointer',MagnifyPointer);
- Add(MK_CTRLSHIFTS,ScrapMacro,'Shrink pointer',ShrinkPointer);
- {$ENDIF}
- end else begin
- OpenDialog1.FileName:=UpperCase(ParamStr(1));
- ReadFromFile(OpenDialog1.FileName,true);
- end;
- CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
- NumLockButton.Caption:='Num '+OffOn[NumLock];
- ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
- end;
- end;
-
- procedure TSuperRecorder.MacroSet1Played(Sender: TObject; State: TUserMacroEngineState);
- begin
- StatusBar1.Panels[1].Text:=MacroSet1.StateName[State];
- end;
-
- procedure TSuperRecorder.SaveBtnClick(Sender: TObject);
- begin
- If (SaveDialog1.FileName='') and (OpenDialog1.FileName<>'') then
- SaveDialog1.FileName:=OpenDialog1.FileName;
- If (SaveDialog1.Execute) then MacroSet1.SaveToFile(SaveDialog1.FileName);
- end;
-
- procedure TSuperRecorder.LoadBtnClick(Sender: TObject);
- begin
- If (OpenDialog1.Execute) then MacroSet1.ReadFromFile(OpenDialog1.FileName,Merge.Checked);
- end;
-
- procedure TSuperRecorder.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- MacroSet1.MacrosOff;
- DestroyCursor(BIGPOINT);
- end;
-
- procedure TSuperRecorder.btCreateCodeMacroClick(Sender: TObject);
- begin
- try
- OurWindow:=SuperRecorder.Handle;
- With MacroSet1, MacroKeyComboBox1 do
- If (MKey>0) then Add(MKey,ScrapMacro,edMacroName.Text,ExampleCodeMacroProcedure);
-
- except
- on Exception Do MessageBox(0,'An error occurred while adding the Code Macro','',MB_APPLMODAL);
- end;
- end;
-
- procedure TSuperRecorder.CancelCheckClick(Sender: TObject);
- begin
- MacroSet1.CancelChecking:=CancelCheck.Checked;
- end;
-
- procedure TSuperRecorder.DeleteBtnClick(Sender: TObject);
- begin
- MacroSet1.Delete(MacroSet1.Keys[Pred(StringGrid1.Row)]);
- end;
-
- procedure TSuperRecorder.MousePointerClick(Sender: TObject);
- begin
- If MousePointer.Checked then MacroSet1.MouseBase:=MBPointer;
- end;
-
- procedure TSuperRecorder.MouseWindowClick(Sender: TObject);
- begin
- If MouseWindow.Checked then MacroSet1.MouseBase:=MBWindow;
- end;
-
- procedure TSuperRecorder.MouseScreenClick(Sender: TObject);
- begin
- If MouseScreen.Checked then MacroSet1.MouseBase:=MBScreen;
- end;
-
- procedure TSuperRecorder.btSendKeysClick(Sender: TObject);
- begin
- ActiveControl:=Memo1;
- macroset1.SendKeys(PChar(edSendKeys.Text), True);
- end;
-
- procedure TSuperRecorder.MacroSet1Assigned(Sender: TObject;
- Macro: Pointer);
- var
- MMacs : word;
- MCnt : byte;
- begin
- With MacroSet1, StringGrid1 do begin
- RowCount:=2;
- Cells[0,0]:='Hot key';
- Cells[1,0]:='Name';
- Cells[0,1]:='';
- Cells[1,1]:='';
- MMacs:=MaxMacroNum;
- For MCnt:=0 to pred(MMacs) do begin
- try
- Cells[0,Succ(MCnt)]:=KeyNames[Keys[MCnt]];
- Cells[1,Succ(MCnt)]:=Names[Keys[MCnt]];
- except
- on EMacroNotFound Do begin
- {We don't care about not finding our macros};
- Cells[0,Succ(MCnt)]:='UNDEFINED';
- Cells[1,Succ(MCnt)]:='UNDEFINED';
- end;
- end;
- RowCount:=RowCount+1;
- end;
- end;
- end;
-
- procedure TSuperRecorder.btAppActivateClick(Sender: TObject);
- begin
- MacroSet1.AppActivate(edAppActivate.Text);
- end;
-
- procedure TSuperRecorder.CapsLockButtonClick(Sender: TObject);
- begin
- With MacroSet1 do begin
- If CapsLock then CapsLock:=false
- else CapsLock:=true;
- CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
- end;
- end;
-
- procedure TSuperRecorder.ScrollLockButtonClick(Sender: TObject);
- begin
- With MacroSet1 do begin
- If ScrollLock then ScrollLock:=false
- else ScrollLock:=true;
- ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
- end;
- end;
-
- procedure TSuperRecorder.NumlockButtonClick(Sender: TObject);
- begin
- With MacroSet1 do begin
- If NumLock then NumLock:=false
- else NumLock:=true;
- NumLockButton.Caption:='Num '+OffOn[NumLock];
- end;
- end;
-
- procedure TSuperRecorder.FormActivate(Sender: TObject);
- begin
- With MacroSet1 do begin
- CapsLockButton.Caption:='Caps '+OffOn[CapsLock];
- NumLockButton.Caption:='Num '+OffOn[NumLock];
- ScrollLockButton.Caption:='Scroll '+OffOn[ScrollLock];
- end;
- end;
-
- initialization
- end.
-